// pages/home/home.js
Page({

    data: {
        isShowPlace: true,
        types: [{
                // loadState: 1 loading, 2 ok, 3 nodata
                name: "影院热映", list: [], loadState: 1
            },
            {
                name: "近期热门", list: [], loadState: 1
            },
            {
                name: "免费在线", list: [], loadState: 1
            },
            {
                name: "猜你喜欢", list: [], loadState: 1
            }
        ]
    },

    inputSearchValue(event) {
        var value = event.detail.value;
        var isShowPlace = true;
        if ("" != value) {
            isShowPlace = false;
        }
        this.setData({
            isShowPlace
        });
    },
    doSearchFilms(event) {
        var value = event.detail.value;
        console.log("search-value:", value);
    },
    loadHomeSuggestion() {
        /*
            wx 关键字是微信小程序中提供的全局的工具方法对象;
                + 在小程序的任意JS文件中都可以直接使用;
                + 该对象提供了微信小程序中使用的各种api接口
                + 小程序的JS代码中可以直接通过调用 wx 对象中的方法实现各种JS交互功能
        */
        /*
            wx.request(options) 是微信小程序提供的专用于 ajax 异步数据请求的执行方法(不支持文件的下载和上传)
                + 该方法在微信小程序第一个版本时就已经存在，所以该方法并未兼容 Promise ,
                   采用传统的 callback 模式，其使用规则和方式 类似于 jQuery 的 $.ajax 的 callback 操作
                + 请求的相关地址参数定义由 options 配置
                + options 取值 Object 类型，描述请求的 地址、类型、参数、结果……
            
            wx.request({
                url: '请求地址',
                data: '请求参数',
                header: '请求头设置',
                timeout: '定义请求最大时长',
                method: '请求类型(类型名称必须全大写)默认值 GET ',
                dataType: '定义响应的数据对应的格式类型, 默认值 JSON',
                responseType: '和dataType类似, 一般使用 dataType'
                success: '取值 function 描述请求成功的执行函数',
                fail: '取值 function 描述请求失败的执行函数',
                complete: '取值 function 描述无论请求成功还是失败都会执行的函数'
            });

            wx.request 只能完成 合法域名 的请求发送，如果不在合法域名中，请求发送会直接报错
                + 解决方案1：通过开启 详情->本地设置->不校验合法域名 的功能，跳过地址检查
                            只能被用于 开发测试 (上线和真机模拟都无法继续请求)
                + 解决方案2：将后端的真实接口域名定义在微信小程序的合法域名列表中
                            -> 登录当前微信小程序对应开发者账号的 网站后台
                            -> 进入 开发-开发管理-开发设置-服务器域名
                            -> 点击修改 增加或删除合法域名 (每次操作都需要身份验证，每个月只能修改50次)
                            -> 添加的域名必须是 HTTPS 协议域名，不能使用IP地址，只需提供服务器根路径域名即可
                               多个域名之间以 ; 关键字隔开
                            -> 通过 详情->本地设置->项目配置 检查同步结果

            
        */
        wx.request({
            url: 'https://m.douban.com/rexxar/api/v2/movie/suggestion',
            data: {
                start: 0, // 从第几条查询
                count: '8', // 查询几条
                new_struct: 1,
                with_review: 1,
                for_mobile: 1,
                ck: 'sew4'
            },
            method: 'GET',
            // 微信小程序请求执行成功后，返回的结果包含请求相关状态的数据对象
            //     当前请求cookies、时间、消息、状态和响应头配置，
            //     其中 包含的 data 属性，为后端返回的数据内容
            success:(result) => {
                // 方法使用箭头函数，是为了保证方法内部的this和外部方法this保持一致，方便后续对当前页面模板对象的操作
                console.log('success:', result);
                //console.log('data:', result.data);

                // 模拟请求延迟
                setTimeout(()=>{
                    this.data.types[0].loadState = 2;
                    if(result.statusCode == 200){
                        this.data.types[0].list = result.data.items;
                    } else {
                        this.data.types[0].loadState = 3;
                        wx.showToast({
                            title: result.data.localized_message,
                            icon: "error",
                            duration: 2000
                        })
                    }
                    this.setData({
                        types: this.data.types
                    });
                }, 1000);
            },
            fail: (error) => {
                console.log('error:', error);
                this.data.types[0].loadState = 3;
                this.setData({
                    types: this.data.types
                });
                wx.showToast({
                    title: '网络异常',
                    icon: "error",
                    duration: 2000
                })
            },
            complete: (data) => {
                //console.log('请求结束', data);
            }
        });
    },
    
    /*
    微信小程序的页面注册方法 Page(options) 的配置参数 options中，可以定义一些特殊监听方法，这些方法被叫做生命周期函数。
        + 页面生命周期函数：在当前页面特殊的执行时间段被调用的函数
            onLoad	    function	   生命周期回调—监听页面加载(window.onload)
            onReady	    function	   生命周期回调—监听页面初次渲染完成(document.onload)
            onUnload	function	   生命周期回调—监听页面卸载
            onShow	    function	   生命周期回调—监听页面显示(页面切换显示、第一个加载、由后台切换到前台时执行的方法)
            onHide	    function	   生命周期回调—监听页面隐藏(页面切换隐藏，由前台切换到后台时执行的方法)
    */
    onLoad(options) {
        //生命周期函数--监听页面加载
        console.log('home-onLoad1');
        this.loadHomeSuggestion();
    },
    onShow() {
        //生命周期函数--监听页面显示
        console.log('home-onShow2');
    },
    onReady() {
        //生命周期函数--监听页面初次渲染完成
        console.log('home-onReady3');
    },
    onHide() {
        //生命周期函数--监听页面隐藏
        console.log('home-onHide');
    },
    onUnload() {
        //生命周期函数--监听页面卸载
        console.log('home-onUnload');
    },
    onPullDownRefresh() {
        //页面相关事件处理函数--监听用户下拉动作
        setTimeout(function(){
            console.log('数据加载完成...');
            wx.stopPullDownRefresh();
        }, 1000);
    },
    onReachBottom() {
        //页面上拉触底事件的处理函数
    },
    onShareAppMessage() {
        //用户点击右上角分享
    }
})